Статья добавлена: 2016-05-31 23:19:46
Автор: Сергей

Настройка pf.conf

Packet Filter - межсетевой экран портированый из OpenBSD. Файл настройки pf лежит:
  • /etc/pf.conf
В данной статье описывается как настроить pf для работы в сети,задействованы две сетевые карточки wan и lan. Для начала в файле pf.conf опишем наши интерфейсы где:
wan - интернет;
lan - это наша локалка;
vpn - наш удаленный доступ в серую сеть;
  • wan="internet"
    lan="192.168.1.0/24"
    vpn="192.168.100.0/24"
Дальше добавляем следующее: что значит не фильтруем пакеты на кольцевом интерфейсе
  • set skip on lo0
для отброшенных пакетов TCP отсылается пакет TCP RST, для прочих ICMP Unreachable
  • set block-policy return
нормализируем трафик
  • scrub in all
Дальше мы настраиваем NAT: где пропускаем с wan на lan все:
  • nat on $wan from $lan to any -> ($wan)
также пропускаем с $wan $vpn:
  • nat on $wan from $vpn to any ->($wan)
открываем доступ по RDP на определенный порт и хост
  • rdr on $wan inet proto tcp from any to ($wan) port 5900:5906 -> 192.168.1.2
Блокируем весь трафик
  • block in all
Можно заблокирывать весь исходящий трафик определенного хоста
  • block out on $lan from 192.168.1.2 to any
Включение антиспуфа на кольце
  • antispoof quick for lo0 inet
Блокировка трафика не через роутер:
  • block in from no-route to any
Если пакет зашел то мы его выпускаем
  • pass out keep state
Пропускаем icmp запросы:
  • pass inet proto icmp from any to any
Тут мы открываем порты для FTP(20:21), RDP(5900:5906), MPD5(1723), netbios(137,138), dns(53), http(80), https(443), icq(5190), printer_usb(631) и все порты с 49152:65535
  • pass in proto {tcp,udp} from any to any port 49152:65535 keep state
    pass in proto {tcp,udp} from any to any port 5900:5906 keep state
    pass in proto {tcp,udp} from any to any port 20:21 keep state
    pass in on $wan proto {tcp,udp} from any to ($wan) port 1723 keep state
    pass in on $wan proto udp from any to ($wan) port 137 keep state
    pass in proto {tcp,udp} from any to any port 53 keep state
    pass in proto {tcp,udp} from any to any port 80 keep state
    pass in proto {tcp,udp} from any to any port 443 keep state
    pass in proto {tcp,udp} from any to any port 5190 keep state
    pass in on $wan proto udp from any to ($wan) port 138 keep state
    pass in proto {tcp,udp} from any to any port 631 keep state
Просмотр лога срабатываний блокировок, умолчанию сохраняемого в /var/log/pflog:
  • tcpdump -n -e -ttt -r /var/log/pflog
    tcpdump -n -e -ttt -r /var/log/pflog port 80
    tcpdump -n -e -ttt -r /var/log/pflog and host 192.168.1.1
Срабатывание блокировок в режиме реального времени:
  • tcpdump -n -e -ttt -i pflog0
    tcpdump -n -e -ttt -i pflog0 port 80
    tcpdump -n -e -ttt -i pflog0 host 192.168.1.1

Список команд для управления pf фильтром:

  • pfctl -d выключить пакет-фильтр
    pfctl -e включить пакет-фильтр
    pfctl -f /etc/pf.conf загрузить конфиг из /etc/pf.conf
    pfctl -n -f /etc/pf.conf проверить на ошибки /etc/pf.conf, но не загружать его
    pfctl -R -f /etc/pf.conf загрузить только правила фитрации
    pfctl -N -f /etc/pf.conf загрузить только правила NAT
    pfctl -O -f /etc/pf.conf load загрузить только опции
    pfctl -F all сбросить все
    pfctl -F rules сбросить только правила фильтрации
    pfctl -F queue сбросить только очереди
    pfctl -F nat сбросить правила NAT
    pfctl -F info сбросить всю статистику
    pfctl -z clear очистить все счетчики
    pfctl -s rules показать текущие правила фильтрации
    pfctl -v -s rules show показать информацию по каждому правилу фильтрации
    pfctl -vvsr показать текущие правила фильтрации с добавлением номера правила
    pfctl -v -s nat показать текущие правила NAT отдельно по каждому правилу
    pfctl -s nat -i xl1 показать правила NAT для интерфейса xl1
    pfctl -s queue показать очереди
    pfctl -s state показать текущее состояние таблиц
    pfctl -s info показать статистику правил и состояние счетчиков
    pfctl -s all показать все что можно
    pfctl -t testtable -T show просмотр содержимого таблицы
    pfctl -t testtable -T show -v более подробной статистики по каждому адресу
    pfctl -t testtable -T add 192.168.1.1 добавление адресов в таблицу
    pfctl -t testtable -T delete 192.168.1.1 удаление адресов из таблицы
    pfctl -sr просмотр проброшенных портов

Просмотр логов

Просмотр лога срабатываний блокировок, умолчанию сохраняемого в /var/log/pflog:
  • tcpdump -n -e -ttt -r /var/log/pflog
    tcpdump -n -e -ttt -r /var/log/pflog port 80
    tcpdump -n -e -ttt -r /var/log/pflog and host 192.168.1.1
Срабатывание блокировок в режиме реального времени:
  • tcpdump -n -e -ttt -i pflog0
    tcpdump -n -e -ttt -i pflog0 port 80
    tcpdump -n -e -ttt -i pflog0 host 192.168.1.1